/**
 * @file app
 * @author lishaohai
 */
import {generateTree, createRoutes} from '@/router/utils';
import {deepCopy, isMobile, isWeixin} from '@/utils/utils';
// import AppRoutes from '@/router/routes';
import {SET_MENU_TREE, SET_TOGGLE_SIDEBAR, SET_CHARTS_RESIZE, SET_CLOSE_MENU} from '@/store/mutation-types';
import {getMenus} from '@/api/common';
import {
    ACCOUNT_PARENT,
    ACCOUNT_WECHAT,
    ACCOUNT_ALIPAY,
    ACCOUNT_MERCHANTS,
    ACCOUNT_ALIPAY_TRANSCACTIONS,
    ACCOUNT_ALIPAY_TRANSCACTIONS_HISTORY,
    PROFILE,
    // PERMISSION_ADMIN,
    BILL_LIST,
    BILL_LIST_DETAIL,
    BILL_EDIT,
    BILL_DETAIL,
    // BILL,
    PLATFORM,
    PERMISSION_INTERFACE,
    PERMISSION_INTERFACE_RECOVERY,
    PERMISSION_FUNCTION,
    // PERMISSION_MODULE_CHILD,
    // PERMISSION_MODULE_PARENT,
    PERMISSION_MODULE_LAYOUT,
    PERMISSION_MODULE_LAYOUT_ADD,
    PERMISSION_MODULE_LAYOUT_DETAIL,
    PERMISSION_MODULE_LAYOUT_EDIT,
    PERMISSION_FUNCTION_ADD,
    PERMISSION_FUNCTION_DETAIL,
    PERMISSION_FUNCTION_EDIT
} from '@/router/route-name';

const state = {
    hasChartsResize: 'update', // 此值改变 则图标有更新
    menuTree: [], // 左侧菜单数据
    sidebar: {
        opened: localStorage.getItem('sidebarStatus') ? !!+localStorage.getItem('sidebarStatus') : true
    },
    isCloseMenu: localStorage.getItem(SET_CLOSE_MENU) === 'true',
    isMobile: isMobile(),
    isWeixin: isWeixin() // 是否为微信浏览器
};

const getters = {
    hasChartsResize: state => state.hasChartsResize,
    menuTree: state => state.menuTree,
    sidebar: state => state.sidebar,
    isCloseMenu: state => state.isCloseMenu,
    isMobile: state => state.isMobile,
    isWeixin: state => state.isWeixin
};
const mutations = {
    [SET_CHARTS_RESIZE]: (state, str) => {
        state.hasChartsResize = str;
    },
    [SET_MENU_TREE]: (state, data) => {
        state.menuTree = data;
    },
    [SET_TOGGLE_SIDEBAR]: (state, playload) => {
        const sidebar = {...state.sidebar};

        if (playload !== undefined) {
            if (playload) {
                sidebar.opened = !!playload;
                localStorage.setItem('sidebarStatus', 1);
            } else {
                sidebar.opened = !!playload;
                localStorage.setItem('sidebarStatus', 0);
            }

            state.sidebar = sidebar;
            return;
        }

        sidebar.opened = !sidebar.opened;
        if (sidebar.opened) {
            localStorage.setItem('sidebarStatus', 1);
        } else {
            localStorage.setItem('sidebarStatus', 0);
        }
        state.sidebar = sidebar;
    },
    [SET_CLOSE_MENU]: (state, data) => {
        state.isCloseMenu = data;
    }
};
const actions = {
    // 设置是否触发图表的resize方法
    // Set whether to trigger the resize method of the chart
    setChartsResize({commit}) {
        commit(SET_CHARTS_RESIZE, Math.random().toString());
    },
    // 设置收起、展开菜单
    // Set collapse and expand menu
    toggleSideBar({commit}, playload) {
        commit(SET_TOGGLE_SIDEBAR, playload);
    },
    // 设置是否隐藏菜单
    // Set whether to hide the menu
    setCloseMenu({commit}, data) {
        commit(SET_CLOSE_MENU, data);
        localStorage.setItem(SET_CLOSE_MENU, data);
    },
    async getInfo({commit, dispatch}) {
        try {
            const result = await getMenus();
            const {data: res = {}} = result || {data: {}};
            if (res.status !== 200) {
                throw result;
            }
            const routes = res.data || [];
            // let routes = res.data || [];

            // const displays = [
            //     ...routes,
            //     {
            //         meta: {title: '账单管理', index: '', icon: 'iconfont icon-zhangdan'},
            //         id: 2,
            //         parentId: 0,
            //         path: '/bill',
            //         hidden: false,
            //         redirect: '',
            //         _id: '5e88a2f3f19167600098deca',
            //         name: 'BILL',
            //         date: '2020-04-04T15:08:35.193Z'
            //     },
            //     {
            //         id: 9,
            //         parentId: 0,
            //         path: '/account',
            //         name: ACCOUNT_PARENT,
            //         redirect: 'noRedirect',
            //         hidden: false,
            //         meta: {
            //             title: '账户管理',
            //             icon: 'iconfont icon-zhangdan',
            //             index: ''
            //         }
            //     },
            //     {
            //         id: 10,
            //         parentId: 9,
            //         path: '/account/wechat',
            //         name: ACCOUNT_WECHAT,
            //         hidden: false,
            //         meta: {
            //             title: '微信',
            //             icon: 'iconfont icon-zhangdan',
            //             index: ''
            //         }
            //     },
            //     {
            //         id: 11,
            //         parentId: 9,
            //         path: '/account/alipay',
            //         name: ACCOUNT_ALIPAY,
            //         hidden: false,
            //         meta: {
            //             title: '支付宝',
            //             icon: 'iconfont icon-zhangdan',
            //             index: ''
            //         }
            //     },
            //     {
            //         id: 12,
            //         parentId: 11,
            //         path: '/account/alipay/transactions',
            //         name: ACCOUNT_ALIPAY_TRANSCACTIONS,
            //         hidden: true,
            //         meta: {
            //             title: '上传支付宝交易记录明细',
            //             icon: 'iconfont icon-zhangdan',
            //             index: ACCOUNT_ALIPAY
            //         }
            //     },
            //     {
            //         id: 13,
            //         parentId: 11,
            //         path: '/account/alipay/transactions-history',
            //         name: ACCOUNT_ALIPAY_TRANSCACTIONS_HISTORY,
            //         hidden: true,
            //         meta: {
            //             title: '上传支付宝交易记录明细历史列表',
            //             icon: 'iconfont icon-zhangdan',
            //             index: ACCOUNT_ALIPAY
            //         }
            //     },
            //     {
            //         id: 14,
            //         parentId: 9,
            //         path: '/account/merchants',
            //         name: ACCOUNT_MERCHANTS,
            //         hidden: false,
            //         meta: {
            //             title: '招商银行',
            //             icon: 'iconfont icon-zhangdan',
            //             index: ''
            //         }
            //     },
            //     {
            //         id: 15,
            //         parentId: 0,
            //         path: '/personal',
            //         name: PROFILE,
            //         hidden: true,
            //         meta: {
            //             title: '个人信息',
            //             icon: '',
            //             index: ''
            //         }
            //     },
            //     {
            //         meta: {title: '借款平台', index: '', icon: 'el-icon-data-analysis', isOpe: true},
            //         id: 16,
            //         parentId: 2,
            //         path: '/platform',
            //         hidden: false,
            //         // redirect: 'HOME',
            //         name: PLATFORM
            //     },
            //     // {
            //     //     meta: {title: '权限管理', index: '', icon: '', isOpe: true},
            //     //     id: 1666666,
            //     //     parentId: 6,
            //     //     path: '/permission',
            //     //     hidden: false,
            //     //     name: PERMISSION_ADMIN
            //     // },
            //     {
            //         meta: {title: '布局模块', index: '', icon: '', isOpe: true},
            //         id: 1666667,
            //         parentId: 6,
            //         path: '/module_layout',
            //         hidden: false,
            //         name: PERMISSION_MODULE_LAYOUT
            //     },
            //     {
            //         meta: {title: '添加', index: PERMISSION_MODULE_LAYOUT, icon: '', isOpe: true},
            //         id: 166666732,
            //         parentId: 1666667,
            //         path: '/module_layout/add',
            //         hidden: true,
            //         name: PERMISSION_MODULE_LAYOUT_ADD
            //     },
            //     {
            //         meta: {title: '详情', index: PERMISSION_MODULE_LAYOUT, icon: '', isOpe: true},
            //         id: 166666733,
            //         parentId: 1666667,
            //         path: '/module_layout/detail',
            //         hidden: true,
            //         name: PERMISSION_MODULE_LAYOUT_DETAIL
            //     },
            //     {
            //         meta: {title: '编辑', index: PERMISSION_MODULE_LAYOUT, icon: '', isOpe: true},
            //         id: 166666734,
            //         parentId: 1666667,
            //         path: '/module_layout/edit',
            //         hidden: true,
            //         name: PERMISSION_MODULE_LAYOUT_EDIT
            //     },
            //     // {
            //     //     meta: {title: '一级模块', index: '', icon: '', isOpe: true},
            //     //     id: 1666668,
            //     //     parentId: 6,
            //     //     path: '/module_parent',
            //     //     hidden: false,
            //     //     name: PERMISSION_MODULE_PARENT
            //     // },
            //     // {
            //     //     meta: {title: '二级模块', index: '', icon: '', isOpe: true},
            //     //     id: 1666669,
            //     //     parentId: 6,
            //     //     path: '/module_child',
            //     //     hidden: false,
            //     //     name: PERMISSION_MODULE_CHILD
            //     // },
            //     {
            //         meta: {title: '功能管理', index: '', icon: '', isOpe: true},
            //         id: 1666670,
            //         parentId: 6,
            //         path: '/function',
            //         hidden: false,
            //         name: PERMISSION_FUNCTION
            //     },
            //     {
            //         meta: {title: '添加', index: PERMISSION_FUNCTION, icon: '', isOpe: true},
            //         id: 166667011,
            //         parentId: 1666670,
            //         path: '/function/add',
            //         hidden: true,
            //         name: PERMISSION_FUNCTION_ADD
            //     },
            //     {
            //         meta: {title: '详情', index: PERMISSION_FUNCTION, icon: '', isOpe: true},
            //         id: 166667012,
            //         parentId: 1666670,
            //         path: '/function/detail',
            //         hidden: true,
            //         name: PERMISSION_FUNCTION_DETAIL
            //     },
            //     {
            //         meta: {title: '编辑', index: PERMISSION_FUNCTION, icon: '', isOpe: true},
            //         id: 166667013,
            //         parentId: 1666670,
            //         path: '/function/edit',
            //         hidden: true,
            //         name: PERMISSION_FUNCTION_EDIT
            //     },
            //     {
            //         meta: {title: '接口管理', index: '', icon: '', isOpe: true},
            //         id: 1666671,
            //         parentId: 6,
            //         path: '/interface',
            //         hidden: false,
            //         name: PERMISSION_INTERFACE
            //     },
            //     {
            //         meta: {title: '接口恢复', index: '', icon: '', isOpe: true},
            //         id: 1666672,
            //         parentId: 6,
            //         path: '/interface/recovery',
            //         hidden: false,
            //         name: PERMISSION_INTERFACE_RECOVERY
            //     },
            //     {
            //         id: 17,
            //         parentId: 2,
            //         path: '/bill/list',
            //         name: BILL_LIST,
            //         hidden: false,
            //         meta: {
            //             title: '分期账单',
            //             icon: '',
            //             index: ''
            //         }
            //     },
            //     {
            //         id: 19,
            //         parentId: 17,
            //         path: '/bill/list/detail',
            //         name: BILL_LIST_DETAIL,
            //         hidden: true,
            //         meta: {
            //             title: '账单详情',
            //             icon: '',
            //             index: BILL_LIST
            //         }
            //     },
            //     {
            //         id: 29,
            //         parentId: 18,
            //         path: '/bill/edit/detail',
            //         name: BILL_DETAIL,
            //         hidden: true,
            //         meta: {
            //             title: '账单详情',
            //             icon: '',
            //             index: BILL_EDIT
            //         }
            //     },
            //     {
            //         id: 27,
            //         parentId: 6,
            //         path: '/auth',
            //         name: 'AUTH',
            //         hidden: false,
            //         meta: {
            //             title: '用户管理',
            //             icon: '',
            //             index: ''
            //         }
            //     },
            //     {
            //         id: 28,
            //         parentId: 6,
            //         path: '/role',
            //         name: 'ROLE',
            //         hidden: false,
            //         meta: {
            //             title: '角色管理',
            //             icon: '',
            //             index: ''
            //         }
            //     }
            // ];

            // const item = displays.find(item => item.id === 2);

            // item.path = '';

            // displays.push({
            //     ...item,
            //     name: BILL_EDIT,
            //     path: '/bill/edit',
            //     id: 18,
            //     parentId: 2,
            //     meta: {
            //         ...item.meta,
            //         title: '平台账单',
            //         index: ''
            //     }
            // });
            // console.log('displays', displays);

            const menuTree = generateTree(-1, deepCopy(routes));

            commit(SET_MENU_TREE, menuTree);
            const output = createRoutes(-1, deepCopy(routes));

            return output;
            // return new Promise(resolve => {
            //     const menuTree = generateTree(-1, deepCopy(AppRoutes));
            //     // console.log('menuTree :', menuTree);
            //     commit(SET_MENU_TREE, menuTree);
            //     setTimeout(() => {
            //         resolve(createRoutes(-1, deepCopy(AppRoutes)));
            //     }, 500);
            // });
        } catch (error) {
            console.error('error :>> ', error);
            const {status} = error.response || {};
            if (status === 401) {
                // 注销登录
                // logout
                dispatch('user/handleLogout', null, {root: true});
            }
            throw error;
        }
    }
};

export default {
    namespaced: true,
    state,
    getters,
    mutations,
    actions
};
